메모리 맵 파일
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
메모리 맵 파일은 디스크의 파일 내용을 프로세스의 가상 메모리 주소 공간에 매핑하여 파일 입출력을 수행하는 기술이다. 이는 파일 내용을 메모리에 직접 접근하는 방식으로, 시스템 호출 오버헤드를 줄여 성능 향상을 가져온다. 또한, 지연 적재를 통해 메모리 사용 효율성을 높이고, 코드 간소화 및 프로세스 간 통신(IPC)에도 유용하게 사용된다. 메모리 맵 파일은 영속 파일과 비영속 파일의 두 가지 유형으로 나뉘며, 운영 체제에서 실행 파일 로드, 구조체 형식의 데이터 접근, 공유 메모리 구현 등 다양한 용도로 활용된다. POSIX의 mmap 함수, 윈도우 API의 CreateFileMapping 함수 등을 통해 지원되며, 자바, .NET, 파이썬, C++ 등 다양한 프로그래밍 언어에서도 관련 기능을 제공한다. 하지만 페이지 부재 오버헤드, 주소 공간 제한, I/O 오류 처리 등의 단점도 존재한다.
더 읽어볼만한 페이지
- 가상 메모리 - 메모리 관리 장치
메모리 관리 장치(MMU)는 가상 주소를 물리 주소로 변환하여 메모리 접근을 관리하고 보호하는 하드웨어 장치로서, 가상 메모리 시스템에서 독립적인 가상 주소 공간을 제공하고 불법적인 메모리 접근을 차단하며, 페이지 테이블을 통해 외부 단편화 문제를 완화하고 트랜슬레이션 룩어사이드 버퍼(TLB)로 주소 변환 속도를 향상시킨다. - 가상 메모리 - 가상 주소 공간
가상 주소 공간은 운영 체제가 프로세스에 제공하는 논리적인 메모리 공간으로, 실제 물리 메모리 주소와 독립적으로 관리되며, 프로세스는 이 공간을 통해 실행 파일, DLL 파일, 페이지 파일 등을 매핑하고 메모리를 할당받는다.
메모리 맵 파일 | |
---|---|
개요 | |
유형 | 파일 시스템 |
지원 운영 체제 | 유닉스 계열 윈도우 OS/2 macOS 리눅스 |
특징 | |
주요 기능 | 파일의 내용을 메모리에 직접 매핑하여 파일 I/O를 수행 |
장점 | 빠른 접근 속도 효율적인 메모리 사용 프로세스 간 데이터 공유 용이 |
단점 | 파일 크기 제한 (운영 체제 및 시스템 아키텍처에 따라 다름) 파일 변경 시 동기화 문제 발생 가능성 |
활용 분야 | |
데이터베이스 관리 시스템 | 데이터 파일 접근 및 관리 |
이미지 편집 소프트웨어 | 큰 이미지 파일의 빠른 로딩 및 편집 |
비디오 편집 소프트웨어 | 고화질 비디오 파일의 효율적인 처리 |
과학 시뮬레이션 | 대용량 데이터 파일의 빠른 접근 및 처리 |
프로세스 간 통신 | 공유 메모리를 통한 효율적인 데이터 교환 |
구현 방식 | |
시스템 호출 (유닉스 계열) | `mmap()` `munmap()` `msync()` |
API (윈도우) | `CreateFileMapping()` `MapViewOfFile()` `UnmapViewOfFile()` `FlushViewOfFile()` |
성능 고려 사항 | |
페이지 크기 | 메모리 매핑 시 페이지 크기를 고려하여 성능 최적화 |
캐싱 | 운영 체제의 파일 시스템 캐싱 정책 활용 |
동기화 | 파일 변경 시 적절한 동기화 메커니즘 사용 (예: 뮤텍스, 세마포어) |
보안 고려 사항 | |
접근 권한 | 파일에 대한 적절한 접근 권한 설정 |
데이터 유효성 검사 | 메모리 매핑된 영역의 데이터 유효성 검사 |
보안 취약점 | 파일 내용 변조 및 악성 코드 삽입 가능성에 대한 대비 |
2. 역사
메모리 맵 파일의 초기 구현은 1960년대 DEC 시스템 20의 TOPS-20 운영 체제에서 사용된 PMAP 시스템 호출에서 비롯되었다. 이후 SunOS 4에서 유닉스의 mmap 시스템 호출이 도입되면서 널리 확산되었다. Windows NT는 TOPS-20의 PMAP 출시 20년 후, 크기 증가 메모리 맵 파일(Growable Memory-Mapped Files, GMMF)을 도입하였다.
2. 1. TOPS-20 PMAP
DEC 시스템 20의 TOPS-20 운영 체제에서 사용된 '''PMAP''' 시스템 호출은 초기 구현 중 하나이다.[1][2] PMAP은 소프트웨어 하우스의 시스템-1022 데이터베이스 시스템에서 사용되었다.[3]2. 2. SunOS 4 mmap
SunOS 4[4]는 프로그램을 "파일을 메모리에 매핑"할 수 있게 해주는 유닉스의 mmap을 도입했다.[5]2. 3. Windows Growable Memory-Mapped Files (GMMF)
Windows NT는 TOPS-20의 PMAP가 출시된 지 20년 후에 GMMF(Growable Memory-Mapped Files, 크기 증가 메모리 맵 파일)를 도입했다.[6][7]`CreateFileMapping` 함수는 크기를 인자로 전달해야 하고, 파일 크기를 변경하는 것은 쉽게 처리되지 않기 때문에 GMMF API가 개발되었다. GMMF를 사용하려면 파일이 커질 수 있는 최대 크기를 선언해야 하지만, 사용하지 않는 공간은 낭비되지 않는다.[6][7]
3. 구조
메모리 맵 파일은 디스크 상의 파일 블록들과 프로세스의 페이지를 연결한다. 가상 메모리에 사상(mapping)만 되어 있을 뿐, 실제 메모리에 파일을 불러오는 시기는 해당 주소에 읽거나 쓰기 작업을 시도할 때이다. 이 작업은 운영 체제의 가상 메모리 관리 기법(페이징)과 페이지 부재를 이용하여 파일 내용을 메모리에 적재한다. 일반적으로 파일에서 불러오는 자료는 페이지 크기와 같은 4KiB이지만, 몇몇 운영 체제에서는 하드디스크의 낮은 임의 접근 시간을 고려해 4KiB보다 많은 자료를 페이지로 올릴 수도 있다.
메모리 맵 파일로 작업 중인 데이터가 실제 파일로 바로 반영되지는 않으며, 페이지 교체 알고리즘에 따라 해당 페이지가 메모리에서 내려가거나, 메모리 맵 파일을 닫을 때 변경 내용이 실제 파일에 반영된다. 메모리 맵 파일과 파일 입출력 API를 동시에 사용할 때 동기화 문제가 발생할 수 있으므로 주의해야 한다. 따라서 메모리 맵 파일을 사용할 때에는 읽기 전용으로만 사용하는 목적이 아닌 이상 파일 입출력 API를 사용하지 않는 것이 좋다. 오른쪽 그림은 메모리 맵 파일을 사용할 때 프로세스의 가상 주소와 물리 주소, 그리고 파일들의 관계를 나타낸 것이다. 각 블록은 페이지 단위로 나타내었다. 예제에서는 프로세스 2개와 파일 2개가 나오며, 이중 b2는 메모리 맵 파일의 공유를, b3는 사상이 되었으나 아직 메모리에 적재되지 않은 것을 나타낸다.
4. 장점
메모리 맵 파일은 다음과 같은 장점을 가진다.
- 성능 향상: 파일 내용을 메모리 주소에 사상하여 직접 접근하므로, 시스템 호출 오버헤드를 줄이고 빠른 입출력을 가능하게 한다. 특히 대용량 파일에서 성능 향상이 두드러진다.[43] 시스템 호출은 프로그램의 로컬 메모리에 대한 간단한 변경보다 몇 배나 느리다.[9] 또한, 대부분의 운영 체제에서 맵핑된 메모리 영역은 실제로 커널의 페이지 캐시(파일 캐시)이므로 사용자 공간에 복사본을 생성할 필요가 없다.[9]
- 효율적인 메모리 사용: 지연 적재(lazy loading)를 통해 필요한 부분만 메모리에 적재하므로 메모리 사용량을 최적화할 수 있다. 매우 큰 파일에도 소량의 RAM을 사용할 수 있다.[9] 사용 가능한 메모리 양보다 훨씬 큰 파일의 전체 내용을 로드하려고 하면 운영 체제가 디스크에서 메모리로 읽고 동시에 메모리에서 페이지를 디스크로 다시 쓰면서 심각한 스래싱(컴퓨터 과학)이 발생할 수 있지만, 메모리 맵은 요구 페이징과 유사하게 데이터를 편집하는 동안 더 작은 페이지 크기 섹션을 로드할 수 있다.[9]
- 코드 간소화: 파일 입출력을 위한 별도의 버퍼나 자료 구조가 필요 없어 코드가 간결해지고 유지보수가 용이하다. 직접적인 파일 입출력을 수행할 필요 없이, 파일 내용이 메모리 주소에 사상되므로 파일을 모두 불러온 것처럼 메모리 주소를 이용하여 연산 작업을 할 수 있다.[43]
- 프로세스 간 통신 (IPC): 공유 메모리 메커니즘을 통해 효율적인 프로세스 간 통신을 지원한다. 최신 보호 모드 운영 체제에서 프로세스는 일반적으로 다른 프로세스에서 사용하기 위해 할당된 메모리 공간에 접근하는 것이 허용되지 않지만, 메모리 맵 파일 I/O를 사용하면 가능하다. 두 개 이상의 응용 프로그램이 단일 물리적 파일을 메모리에 동시에 매핑하고 이 메모리에 접근할 수 있다.[13]
하지만, 소규모 파일의 경우 메모리 맵은 항상 페이지 크기(대부분 4 KiB)에 맞춰 정렬되므로 여유 공간 낭비가 발생할 수 있다.[8] 예를 들어 5 KiB 파일은 8 KiB를 할당하여 3 KiB가 낭비된다.[43]
5. 단점
메모리 맵 파일 방식은 페이지 부재 발생 시 데이터 전송 시간이 오버헤드로 작용할 수 있다.[46] 데이터베이스처럼 파일을 읽고 쓰는 데 오버헤드를 최소화하는 자료 구조 및 알고리즘과 비교하면 메모리 맵 파일이 오히려 느릴 수 있다.
IA-32 기반 시스템과 같이 32비트 시스템에서는 PAE 기술을 사용하지 않을 경우, 사용 가능한 최대 크기가 4GiB로 제한된다.[47] 따라서 메모리 맵 파일이 한 번에 다룰 수 있는 크기는 이보다 작아지며, 이 크기를 넘는 파일을 다루려면 계산이 복잡해질 수 있다. 하지만 64비트 아키텍처에서는 이러한 문제가 거의 해소되었다.
메모리 맵 파일은 리눅스를 포함한 많은 운영 체제에서 페이지 폴트를 처리하는 코어 수에 제한이 있어, 표준 파일 I/O 방식보다 확장성이 떨어지는 경향이 있다. NVM Express SSD와 같이 매우 빠른 저장 장치를 사용할 경우, 이러한 제한으로 인한 오버헤드가 문제가 될 수 있다.[12]
매핑된 메모리에 접근하는 동안 I/O 오류(예: 이동식 드라이브 연결 해제)가 발생하면, POSIX에서는 SIGSEGV/SIGBUS 신호, Windows에서는 EXECUTE_IN_PAGE_ERROR 구조적 예외가 발생한다. 따라서 매핑된 메모리에 접근하는 모든 코드는 이러한 오류를 처리할 준비가 되어 있어야 한다.
MMU가 있는 하드웨어 아키텍처에서만 메모리 맵 파일을 지원할 수 있다. MMU가 없는 아키텍처에서는 매핑 요청 시 운영 체제가 전체 파일을 메모리에 복사할 수 있지만, 이는 매우 비효율적이고 느리며 사용 가능한 메모리 크기 이내의 파일에 대해서만 작동한다.
6. 유형
메모리 맵 파일에는 두 가지 유형이 있다.
- 영속(Persisted) 파일은 디스크의 소스 파일과 연결된다. 데이터는 마지막 프로세스가 완료되면 디스크의 소스 파일에 저장된다. 이러한 메모리 맵 파일은 매우 큰 소스 파일 작업에 적합하다.
- 비영속(Non-persisted) 파일은 디스크의 파일과 연결되지 않는다. 마지막 프로세스가 해당 파일을 사용하는 작업을 완료하면 데이터가 손실된다. 이러한 파일은 프로세스 간 통신(IPC)을 위한 공유 메모리를 생성하는 데 적합하다.[10]
7. 용도
프로세스를 실행할 때 실행 파일의 각 세그먼트를 메모리에 사상하기 위해 메모리 맵 파일을 이용하는 것은 운영 체제의 주요 기능 중 하나이다. 이 방식을 통해 읽기 전용 세그먼트(예: 실행 코드)를 여러 프로세스가 공유하여 메모리를 절약할 수 있다. 또한, 메모리 맵 파일의 지연 적재 특성 덕분에 실행 파일에서 사용하지 않는 부분은 메모리에 적재되지 않아 메모리 사용을 최적화한다.
파일 내용이 프로그래밍 언어에서 직접 다룰 수 있는 구조체 형식을 가질 경우, 메모리 맵 파일을 통해 자료에 직접 접근할 수 있다.
프로세스 간 통신(IPC)에도 메모리 맵 파일이 사용된다. 현대 운영 체제에서는 프로세스 간 메모리 접근이 제한되므로, 공유 메모리를 활용하는 방법이 고안되었으며, 메모리 맵 파일은 이러한 공유 메모리 구현에 효과적인 메커니즘을 제공한다.
대용량 파일에서 입출력(I/O) 성능 향상에도 기여한다. 시스템 호출을 사용하는 것보다 프로그램의 로컬 메모리에 대한 간단한 변경이 훨씬 빠르며, 대부분의 운영 체제에서 맵핑된 메모리 영역은 커널의 페이지 캐시(파일 캐시)이므로 사용자 공간에 복사본을 생성할 필요가 없기 때문이다.
메모리 맵 파일은 "지연 로딩"을 통해 매우 큰 파일에도 소량의 RAM만 사용할 수 있게 해준다. 사용 가능한 메모리 양보다 훨씬 큰 파일의 전체 내용을 로드하려고 하면 심각한 스래싱(컴퓨터 과학)이 발생할 수 있지만, 메모리 맵은 요구 페이징과 유사하게 데이터를 편집하는 동안 더 작은 페이지 크기 섹션을 로드하여 이러한 문제를 완화한다.
메모리 맵 파일의 가장 일반적인 사용 사례 중 하나는 윈도우 및 유닉스 계열 시스템과 같은 대부분의 최신 운영 체제의 프로세스 로더이다.[33] 프로세스가 시작되면 운영 체제는 메모리 맵 파일을 사용하여 실행 파일과 로드 가능한 모든 모듈을 실행을 위해 메모리로 가져온다. 대부분의 메모리 매핑 시스템은 요구 페이징이라는 기술을 사용하는데, 이는 파일의 부분 집합(각 페이지당 하나)이 물리적 메모리에 로드되고 해당 페이지가 실제로 참조될 때만 로드되는 방식이다.[13]
여러 프로세스 간에 메모리를 공유하는 것도 메모리 맵 파일의 일반적인 용도이다. 최신 보호 모드 운영 체제에서 프로세스는 일반적으로 다른 프로세스에서 사용하기 위해 할당된 메모리 공간에 접근하는 것이 허용되지 않지만, 메모리 맵 파일 I/O를 통해 안전하게 메모리를 공유할 수 있다.
8. 플랫폼 지원
대부분의 최신 운영 체제 또는 런타임 환경은 메모리 맵 파일 접근 형태를 지원한다.
; POSIX (mmap)
: 파일 식별자, 파일 시작점으로부터의 오프셋, 길이를 지정하여 매핑을 생성하는 mmap()영어이 POSIX 사양의 일부로 정의되어 있으며, POSIX를 준수하는 각종 시스템, 유닉스, 리눅스, macOS, OpenVMS 등에 구현되어 있다.
; 윈도
: 메모리 맵 파일을 위한 API로 CreateFileMapping()영어 등을 제공하고 있다.[16]
; Boost C++ 라이브러리
: 윈도와 POSIX를 준수하는 플랫폼을 위한 메모리 맵 파일의 이식 가능한 구현을 제공하고 있다.[17]
; 자바
: FileChannel영어 등 메모리 맵 파일에 접근하는 클래스 및 메서드를 제공하고 있다.
; D 언어
: 표준 라이브러리(std.mmfile 모듈)에서 메모리 맵 파일을 지원하고 있다.[21]
; 루비
: Mmap이라는 gem(라이브러리)이 있으며, 메모리 맵 파일을 구현하고 있다.
; 러스트
: 표준 라이브러리에서 mmap 기능을 제공하지 않지만, memmap2라는 타사 크레이트(라이브러리)가 존재한다.[22]
; 파이썬
: 버전 1.6부터 표준 라이브러리에 mmap영어 모듈이 포함되어 있다.[23] 구현은 플랫폼이 Windows 또는 Unix 계열인지에 따라 크게 다르다.
; Perl
: CPAN에 Sys::Mmap영어[24], File::Map영어[25] 등 메모리 맵 파일용 모듈이 있다.
; .NET 프레임워크
: P/Invoke로 윈도 API를 통해 직접 메모리 맵 파일을 사용할 수 있다. P/Invoke가 필요 없는 관리 코드에서의 메모리 맵 파일은 버전 4부터 도입되었다.[26] 그 이전 버전에서는 서드 파티에서 유사한 라이브러리를 제공했다.
; PHP
: file_get_contents()영어 등으로 메모리 맵 파일을 이용했지만, 5.3에서 삭제되었다.
; R 언어
: CRAN의 라이브러리에 [https://cran.r-project.org/web/packages/bigmemory/index.html bigmemory]가 있으며, Boost 라이브러리의 메모리 맵 파일을 사용하여 대규모 행렬을 메모리에 매핑한다.
; J 프로그래밍 언어
: 2005년 이후부터 메모리 맵 파일을 지원해 왔으며, 박스형 배열 데이터 및 단일 데이터 유형 파일을 지원한다. 'data/jmf'에서 로드할 수 있으며, J의 Jdb 및 JD 데이터베이스 엔진은 열 저장을 위해 메모리 맵 파일을 사용한다.
; 줄리아 프로그래밍 언어
: 표준 라이브러리 내의 Mmap영어 모듈을 통해 메모리 맵 바이너리 파일의 I/O를 지원한다.[29]
8. 1. POSIX
POSIX에서는 mmap 함수를 통해 메모리 맵 파일 기능을 제공하고 있다.[48][49] `MAP_SHARED` 플래그를 사용하면 다른 프로세스에서 같은 파일에 대해 메모리 맵 파일 기능을 사용할 수 있어 공유 메모리로도 활용 가능하다. POSIX를 따르는 운영 체제들(리눅스, 유닉스, 솔라리스 등)은 약간의 차이는 있지만 같은 기능과 특징을 가진 메모리 맵 파일 기능을 제공한다.[50]파일 디스크립터, 파일 시작 위치 및 길이를 지정하여 파일을 매핑하는 함수는[14] POSIX 사양의 일부이므로, 유닉스, 리눅스, macOS[15], OpenVMS와 같이 POSIX를 준수하는 다양한 시스템에서 메모리 매핑 파일에 대한 공통적인 메커니즘을 지원한다.
8. 2. 윈도
윈도우 API에서는 `CreateFileMapping()` 함수와 `MapViewOfFile()` 함수를 통해 메모리 맵 파일 기능을 제공하고 있다.[51][52] 윈도우에서는 공유 메모리를 메모리 맵 파일을 통해서만 사용할 수 있다. ([http://msdn.microsoft.com/ko-kr/library/ms810613.aspx 예제]) Windows NT는 GMMF(Growable Memory-Mapped Files, 크기 증가 메모리 맵 파일)를 갖게 되었다. `CreateFileMapping` 함수는 크기를 인자로 전달해야 하며, 파일 크기를 변경하는 것은 쉽게 처리되지 않으므로, GMMF API가 개발되었다.[6][7] GMMF를 사용하려면 파일 크기가 커질 수 있는 최대 크기를 선언해야 하지만, 사용하지 않는 공간은 낭비되지 않는다.8. 3. 언어별 지원
- 자바에서는 FileChannel영어 클래스를 통해 메모리 맵 파일 기능을 제공한다.[53][54]
- 마이크로소프트 닷넷 프레임워크에서는 MemoryMappedFile영어 클래스를 통해 메모리 맵 파일을 제공한다.
- 파이썬에서는 mmap영어 클래스를 통해 메모리 맵 파일을 제공한다. 다만, 윈도와 POSIX 기반 운영 체제에서 클래스 구조가 다르므로 주의가 필요하다.
- Boost에서도 메모리 맵 파일 기능을 제공한다.
- D 프로그래밍 언어는 표준 라이브러리(std.mmfile 모듈)에서 메모리 맵 파일을 지원한다.
- 루비에는 Mmap이라는 젬(라이브러리)이 있으며, 메모리 맵 파일 객체를 구현한다.
- 러스트는 표준 라이브러리에서 mmap 기능을 제공하지 않지만, memmap2라는 타사 크레이트(라이브러리)가 존재한다.
- Perl의 경우 Sys::Mmap영어 및 File::Map영어과 같이 CPAN에서 메모리 매핑 파일에 사용할 수 있는 여러 모듈이 있다.
- 마이크로소프트 .NET 런타임에서 P/Invoke를 사용하여 Windows API를 통해 메모리 맵 파일을 직접 사용할 수 있다. 메모리 맵 파일에 대한 관리형 액세스(P/Invoke 필요 없음)는 런타임 버전 4에 도입되었다. 이전 버전의 경우 관리형 API를 제공하는 타사 라이브러리가 있다. .NET에는 MemoryMappedFile영어 클래스가 있다.
- PHP는 file_get_contents()영어와 같은 여러 네이티브 파일 액세스 기능에서 메모리 매핑 기술을 지원했지만, 5.3에서 제거되었다.
- R 프로그래밍 언어의 경우 CRAN에 [https://cran.r-project.org/web/packages/bigmemory/index.html bigmemory]라는 라이브러리가 있으며, 이 라이브러리는 Boost 라이브러리를 사용하여 메모리 맵 백업 배열을 R에서 직접 제공한다. [https://cran.r-project.org/web/packages/ff/index.html ff] 패키지는 메모리 맵 벡터, 행렬, 배열 및 데이터 프레임을 제공한다.
- J 프로그래밍 언어는 2005년 이후부터 메모리 맵 파일을 지원해 왔으며, 박스형 배열 데이터 및 단일 데이터 유형 파일을 지원한다. 'data/jmf'에서 로드할 수 있으며, J의 Jdb 및 JD 데이터베이스 엔진은 열 저장을 위해 메모리 맵 파일을 사용한다.
- 줄리아 프로그래밍 언어는 표준 라이브러리 내의 Mmap영어 모듈을 통해 메모리 맵 바이너리 파일의 I/O를 지원한다.
; POSIX (mmap)
: 파일 식별자, 파일 시작점으로부터의 오프셋, 길이를 지정하여 매핑을 생성하는 mmap()영어이 POSIX 사양의 일부로 정의되어 있으며, UNIX, 리눅스, macOS, OpenVMS 등 POSIX를 준수하는 각종 시스템에 구현되어 있다.
; Microsoft Windows
: 메모리 맵 파일을 위한 API로 CreateFileMapping()영어 등을 제공하고 있다.
; Boost C++ 라이브러리
: Microsoft Windows와 POSIX를 준수하는 플랫폼을 위한 메모리 맵 파일의 이식 가능한 구현을 제공하고 있다.
; Java
: FileChannel영어 등 메모리 맵 파일에 접근하는 클래스 및 메서드를 제공하고 있다.
; D 언어
: 표준 라이브러리(std.mmfile 모듈)에서 메모리 맵 파일을 지원하고 있다.
; Ruby
: Mmap이라는 gem(라이브러리)이 있으며, 메모리 맵 파일을 구현하고 있다.
; Python
: 버전 1.6부터 표준 라이브러리에 mmap영어 모듈이 포함되어 있다. 구현은 플랫폼이 Windows 또는 Unix 계열인지에 따라 크게 다르다.
; Perl
: CPAN에 Sys::Mmap영어, File::Map영어 등 메모리 맵 파일용 모듈이 있다.
; .NET Framework
: P/Invoke로 Windows API를 통해 직접 메모리 맵 파일을 사용할 수 있다. P/Invoke가 필요 없는 관리 코드에서의 메모리 맵 파일은 버전 4부터 도입되었다. 그 이전 버전에서는 서드 파티에서 유사한 라이브러리를 제공했다.
; PHP
: file_get_contents()영어 등으로 메모리 맵 파일을 이용했지만, 5.3에서 삭제되었다.
; R 언어
: CRAN의 라이브러리에 [http://cran.r-project.org/web/packages/bigmemory/index.html bigmemory]가 있으며, Boost 라이브러리의 메모리 맵 파일을 사용하여 대규모 행렬을 메모리에 매핑한다.
참조
[1]
문서
Development began 1969, shipped 1976
[2]
웹사이트
TOPS-20 Monitor Calls Reference Manual
http://www.bitsavers[...]
[3]
웹사이트
System 1022 Database System
https://groups.googl[...]
[4]
문서
Dec. 1988
[5]
웹사이트
The history of Unix's confusing set of low-level ways to allocate memory
https://utcc.utoront[...]
2018-06-07
[6]
간행물
Add Growable Memory-Mapped Files to your App
1995-10
[7]
Youtube
Creating a shared memory block that can grow in size
https://devblogs.mic[...]
[8]
웹사이트
Using mmap() for Advanced File I/O - BrainDump
http://www.devshed.c[...]
2011-05-21
[9]
문서
'What Do Memory-Mapped Files Have to Offer?.'
http://msdn.microsof[...]
[10]
웹사이트
Memory-Mapped Files
https://msdn.microso[...]
2016-01-04
[11]
문서
read vs. mmap (or io vs. page faults)
http://lists.freebsd[...]
[12]
간행물
Optimizing Memory-mapped I/O for Fast Storage Devices
https://www.usenix.o[...]
2020
[13]
문서
Demand Paging
http://www.linux-tut[...]
[14]
문서
Memory Mapped Files
https://web.archive.[...]
2007-02-09
[15]
문서
Apple – Mac OS X Leopard – Technology – UNIX
https://web.archive.[...]
2009-04-23
[16]
문서
CreateFileMapping Function (Windows)
http://msdn2.microso[...]
[17]
웹사이트
Sharing memory between processes: Memory Mapped Files
http://www.boost.org[...]
Boost.org
[18]
웹사이트
Memory-Mapped Files
http://www.boost.org[...]
Boost.org
[19]
웹사이트
Memory Mapped Files for Windows and POSIX systems
https://sourceforge.[...]
SourceForge
[20]
웹사이트
cpp-mmf
https://github.com/c[...]
GitHub
[21]
웹사이트
std.mmfile - D Programming Language
http://www.digitalma[...]
Digital Mars
2011-12-04
[22]
웹사이트
crates.io: Rust Package Registry
https://crates.io/cr[...]
2024-12-18
[23]
웹사이트
New Modules in 1.6
https://www.python.o[...]
2008-12-23
[24]
웹사이트
Sys::Mmap Perl Module
https://metacpan.org[...]
[25]
웹사이트
File::Map Perl Module
https://metacpan.org[...]
[26]
문서
DotNet
https://web.archive.[...]
2010-04-19
[27]
웹사이트
MemoryMappedFile Class (System.IO.MemoryMappedFiles)
https://learn.micros[...]
2024-10-20
[28]
웹사이트
Memory-Mapped Files - .NET
https://learn.micros[...]
2022-12-14
[29]
웹사이트
Memory-mapped I/O · The Julia Language
https://docs.juliala[...]
2023-09-03
[30]
문서
Using mmap() for Advanced File I/O
http://www.devshed.c[...]
BrainDump Tutorials
[31]
문서
'What Do Memory-Mapped Files Have to Offer?.'
http://msdn.microsof[...]
[32]
문서
read vs. mmap (or io vs. page faults)
http://lists.freebsd[...]
[33]
문서
Demand Paging
http://www.linux-tut[...]
[34]
문서
CreateFileMapping Function (Windows)
http://msdn2.microso[...]
[35]
웹사이트
Memory-Mapped Files
http://www.boost.org[...]
Boost.org
2008-02-02
[36]
웹사이트
std.mmfile - D Programming Language
http://www.digitalma[...]
Digital Mars
2011-12-04
[37]
웹사이트
New Modules in 1.6
http://www.python.or[...]
2008-12-23
[38]
웹사이트
Sys::Mmap Perl Module
http://search.cpan.o[...]
2012-10-25
[39]
웹사이트
File::Map Perl Module
http://search.cpan.o[...]
2012-10-25
[40]
문서
Memory-Mapped Files
http://msdn.microsof[...]
[41]
웹사이트
DotNet
http://winterdom.com[...]
2010-04-19
[42]
문서
revision log
http://svn.php.net/v[...]
[43]
간행물
A Performance Comparison of "read" and "mmap" in the Solaris 8 OS
http://developers.su[...]
Sun Developer Network
2002
[44]
웹사이트
write
http://pubs.opengrou[...]
The Open Group
[45]
웹사이트
File Size
http://www.gnu.org/s[...]
The GNU C Library
[46]
간행물
"read vs. mmap (or io vs. page faults)"
http://lists.freebsd[...]
freebsd.org Mailing Lists
2004
[47]
웹인용
Intel,"3.3 Memory Organization",Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture
http://www.intel.com[...]
2011-12-05
[48]
웹사이트
mmap
http://pubs.opengrou[...]
The Open Group
[49]
문서
shmap함수
http://pubs.opengrou[...]
[50]
문서
예제
http://www.joinc.co.[...]
[51]
웹사이트
CreateFileMapping function
http://msdn.microsof[...]
Microsoft,Microsoft Developer Network
[52]
웹사이트
MapViewOfFile function
http://msdn.microsof[...]
Microsoft,Microsoft Developer Network
[53]
웹사이트
Memory-Mapped Files
http://www.boost.org[...]
Boost C++ Libraries
[54]
문서
예제
http://www.boost.org[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com